package juego;

import java.io.*;
import objetos.aeronaves.civiles.*;
import objetos.aeronaves.enemigos.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
import excepciones.NivelNoEncontradoException;

/*
 * Clase que provee un metodo est�tico para levantar un nivel de un archivo xml, y 
 * agregar los objetos y configurar de manera adecuada el Escenario.
 */
public class Nivel {

	public static void cargarNivel(int numeroNivel)
			throws NivelNoEncontradoException {
		String nivelACargar = "src/niveles/nivel".concat(
				String.valueOf(numeroNivel)).concat(".xml");
		SAXBuilder builder = new SAXBuilder();

		Document doc = null;
		Element root = null;

		try {
			doc = builder.build(new FileInputStream(nivelACargar));
			root = doc.getRootElement();
		} catch (FileNotFoundException e) {
			throw new NivelNoEncontradoException("No existe el archivo: "
					+ nivelACargar);
		} catch (IOException e) {
			throw new NivelNoEncontradoException("Error al cargar el nivel");
		} catch (JDOMException e) {
			throw new NivelNoEncontradoException("Error en el XML");
		}

		Escenario.getInstance().setNumeroNivel(
				Integer.parseInt(root.getAttributeValue("numero")));

		Element guia = root.getChild("guia");

		Escenario.getInstance().setTopePuntaje(
				Integer.parseInt(guia.getAttributeValue("aLos")));
		Escenario.getInstance().setHayAvionGuia(
				Boolean.valueOf(guia.getAttributeValue("hay")));

		/* Tags con las cantidades de aviones */
		Element civiles = root.getChild("civiles");
		Element enemigos = root.getChild("enemigos");

		/* Cantidades de aviones Civiles */
		int cantAvionCivil = Integer.parseInt(civiles
				.getAttributeValue("avionCivil"));
		int cantHelicoptero = Integer.parseInt(civiles
				.getAttributeValue("helicoptero"));

		/* Cantidades de aviones Enemigos */
		int cantCaza = Integer.parseInt(enemigos.getAttributeValue("caza"));
		int cantScout = Integer.parseInt(enemigos.getAttributeValue("scout"));
		int cantBomber = Integer.parseInt(enemigos.getAttributeValue("bomber"));
		int cantAvioneta = Integer.parseInt(enemigos
				.getAttributeValue("avioneta"));
		Escenario.getInstance().setCantEnemigosEnReserva(
				cantBomber + cantAvioneta + cantCaza + cantScout);

		for (int i = 0; i < cantCaza; i++) {
			Escenario.getInstance().ponerAeronaveEnReserva(new Caza());
		}
		for (int i = 0; i < cantScout; i++) {
			Escenario.getInstance().ponerAeronaveEnReserva(new Scout());
		}
		for (int i = 0; i < cantBomber; i++) {
			Escenario.getInstance().ponerAeronaveEnReserva(new Bomber());
		}
		for (int i = 0; i < cantAvioneta; i++) {
			Escenario.getInstance().ponerAeronaveEnReserva(new Avioneta());
		}
		for (int i = 0; i < cantAvionCivil; i++) {
			Escenario.getInstance().ponerAeronaveEnReserva(new AvionCivil());
		}
		for (int i = 0; i < cantHelicoptero; i++) {
			Escenario.getInstance().ponerAeronaveEnReserva(new Helicoptero());
		}
	}

}
